// 执行上下文栈和作用域链

function a () {
    b()
}

function b () {
    c()
}

function c () {
    console.log('hello')
}

a()

/**
上下文是一个栈形结构，先进后出，默认有一个全局上下文
ECS = [
    globalContext
]

ECS.push(functionAContext)
ECS.push(functionBContext)
ECS.push(functionCContext)

以为c() 最先执行完
ECS.pop()
ECS.pop()
ECS.pop()
全局上下文，在浏览器关闭的时候删除
 */

//  函数执行时，也会保存一份自己的作用域





// js 作用域   let  全局作用域  函数作用域 eval
// js 的作用域是静态的，定义时就产生了
// 执行函数时， 执行上下文 EC

// 变量对象 Variabl object 简称 VO； 作用域链   this

// 执行上下文的周期，分为 创建阶段、代码执行阶段

// 函数执行，1，先找形参，没有就用undefined代替
// 2，查找函数声明
// 3，变量声明